package individual.ircon.bilibili.network;

import java.io.IOException;
import java.nio.ByteBuffer;

/**
 * 把WSS客户端里面的字节消息处理出来，仅保留弹幕消息。这里采用回调的方法处理。
 */
public class DanmuMessageHandleCallback {
    private final CallBack Call;

    /**
     * 这里的回调，是你用来处理弹幕消息的代码。
     * @param call 回调对象。
     */
    public DanmuMessageHandleCallback(CallBack call) {
        Call = call;
    }

    /**
     * 用来处理的方法，把WSS接收到字节消息交给这个处理即可。
     * @param bytes WSS的字节消息。
     */
    public synchronized void handle(ByteBuffer bytes) {
        DanmuCoder.DanmuMessage[] ob = null;
        try {
            ob = DanmuCoder.processFrame(bytes.array());
        } catch (IOException e) {
            e.printStackTrace();
        }

        if(ob != null) {
            for(var v: ob) {
                if(v != null && Call != null) Call.call(v);
            }
        }
    }

    /**
     * 自定义回调接口。
     */
    public interface CallBack{
        void call(DanmuCoder.DanmuMessage message);
    }
}
